/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import controller.util.PagingInfo;
import dao.ArquivoJpaController;
import dao.CursoJpaController;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import pagecontroller.JsfUtil;
import dao.exceptions.NonexistentEntityException;
import java.util.ArrayList;
import java.util.Date;
import modelo.Arquivo;
import modelo.Curso;
import modelo.SituacaoAluno;
import modelo.TipoCurso;
import pagecontroller.PageManager;

/**
 *
 * @author Dirac
 */
public class ArquivoController {

    public ArquivoController() {
        //FacesContext facesContext = FacesContext.getCurrentInstance();
        if (JsfUtil.getObjectFromSession("ArquivoJpaController") == null) {
            jpaController = new ArquivoJpaController();
        } else {
            jpaController = (ArquivoJpaController) JsfUtil.getObjectFromSession("ArquivoJpaController");
        }
    }
    private Arquivo arquivo = null;
    private List<Arquivo> arquivos = null;
    private ArquivoJpaController jpaController = null;
    private List<SituacaoAluno> situacoes = null;
    private List<Curso> cursos = null;
    private TipoCurso tipoCurso;

    public Arquivo getArquivo() {
        if (arquivo == null) {
            arquivo = new Arquivo();
        }
        return arquivo;
    }

    public String persiste() {
        if (this.arquivo.getId() == null) {
            return create();
        } else {
            return update();
        }
    }

    public String create() {
        try {
            this.arquivo.setDia(new Date());
            jpaController.create(arquivo);
//            JsfUtil.addSuccessMessage("adicionado com sucesso");
//            this.arquivo = null;
//            this.tipoCurso = null;
            PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
            pm.setPageRelatArquivo();

        } catch (Exception e) {
            JsfUtil.addErrorMessage("Não foi possível crirar o registro");
        }
        return "refreshPage";
    }

    public String update() {
        try {
            jpaController.edit(this.arquivo);
            PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
            pm.setPageRelatArquivo();
//            JsfUtil.addSuccessMessage("arquivo salvo coms sucesso");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ArquivoController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ArquivoController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "refreshPage";
    }

    public String edit() {
        Arquivo arq = (Arquivo) JsfUtil.getObjectFromRequestParameter("arquivo");
        this.arquivo = arq;
        tipoCurso = arq.getCurso().getTipoCurso();
        return "refreshPage";
    }

    public String destroy() {
        try {
            Arquivo arq = (Arquivo) JsfUtil.getObjectFromRequestParameter("arquivo");
            jpaController.destroy(this.arquivo.getId());
            JsfUtil.addSuccessMessage("arquivo removido com sucesso");
            novo();
            //tentativa de fazer com que o sistema retorne para tela de cadastro quando vier do cadatro e de consulta
            //quando vier de consulta
//            PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
//            pm.setPageResultSearchArquivo();

//            ArquivoControllerSearch acs = (ArquivoControllerSearch) JsfUtil.getObjectFromSession("ArquivoControllerSearch");
//            if (acs != null) {
//                System.out.println(acs.removeArquivoList(arq));
//
//            }
//            boolean b = false;
//            if (acs != null) {
//                b = acs.removeArquivoList(arq);
//                if (b) {
//                    pm.setPageResultSearchArquivo();
//                }
//            } else if (!b) {
//                this.novo();
//            }

        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ArquivoController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "refreshPage";
    }

    public List<Arquivo> getArquivos() {
        this.arquivos = jpaController.findArquivoEntities();
        return this.arquivos;
    }

    public List<SituacaoAluno> getSituacoes() {
        this.situacoes = new ArrayList<SituacaoAluno>();
        for (SituacaoAluno situacao : SituacaoAluno.values()) {
            this.situacoes.add(situacao);
        }
        return this.situacoes;
    }

    public List<Curso> getCursos() {
        CursoController cursoController = new CursoController();
        CursoJpaController cursoJpaController = cursoController.getJpaController();
        if (tipoCurso == null) {
            cursos = cursoJpaController.findCursoEntities();
        } else {
            cursos = cursoJpaController.findByTipoCurso(tipoCurso);
        }
        return cursos;

    }

    public ArquivoJpaController getJpaController() {
        return jpaController;
    }

    public TipoCurso getTipoCurso() {
        return tipoCurso;
    }

    public void setTipoCurso(TipoCurso tipoCurso) {
        this.tipoCurso = tipoCurso;
    }

    public String novo() {
        arquivo = null;
        tipoCurso = null;
        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        pm.setPageInserirArquivo();
        return "refreshPage";
    }

    public String load() {
        arquivo = (Arquivo) JsfUtil.getObjectFromRequestParameter("arq");
        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        pm.setPageRelatArquivo();
        return "refreshPage";
    }
}
